package com.lingyun.mqttserver.service.impl;

import com.lingyun.mqttserver.service.MqttAcceptService;
import org.apache.commons.codec.binary.Hex;
import org.springframework.stereotype.Service;



@Service
public class MqttAcceptServiceImpl implements MqttAcceptService {

//    public Boolean CRCVerify(String data){
//        // 示例：Modbus RTU完整帧（十六进制字符串，包含地址、功能码、数据、CRC）
//        String rtuHexFrame = "01030400010002A93B"; // 格式：[地址][功能码][数据长度][数据][CRC]
//
//        try {
//            // 1. 十六进制字符串转byte[]（完整帧，包含CRC）
//            byte[] frameBytes = Hex.decodeHex(rtuHexFrame.toCharArray());
//
//            // 2. 提取CRC校验码前的有效数据（去除最后2字节CRC）
//            byte[] dataWithoutCrc = new byte[frameBytes.length - 2];
//            System.arraycopy(frameBytes, 0, dataWithoutCrc, 0, dataWithoutCrc.length);
//
//            // 3. 从帧末尾提取实际传输的CRC（2字节，大端序）
//            int actualCrc = ((frameBytes[frameBytes.length - 2] & 0xFF) << 8)
//                    | (frameBytes[frameBytes.length - 1] & 0xFF);
//
//            // 4. 使用modbus4j计算CRC16（核心API）
//            int calculatedCrc = Crc16.calculate(dataWithoutCrc);
//
//            // 5. 校验结果
//            if (calculatedCrc == actualCrc) {
//                System.out.println("CRC校验通过！计算值：0x" + Integer.toHexString(calculatedCrc).toUpperCase());
//                // 校验通过后，解析数据区（示例：从索引2开始是数据长度，索引3后是数据）
//                byte[] data = new byte[dataWithoutCrc.length - 2]; // 去掉地址(1字节)和功能码(1字节)
//                System.arraycopy(dataWithoutCrc, 2, data, 0, data.length);
//                System.out.println("有效数据区（十六进制）：" + Hex.encodeHexString(data).toUpperCase());
//            } else {
//                System.out.println("CRC校验失败！计算值：0x" + Integer.toHexString(calculatedCrc).toUpperCase()
//                        + "，实际值：0x" + Integer.toHexString(actualCrc).toUpperCase());
//            }
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}
